# Table of Contents

# Spring Legacy vs. Spring Boot

Legacy Spring 프로젝트를 빌드하면 WAR(Web Application Archive) 형태의 결과물이 생성된다. 이 WAR 파일을 실행하려면 톰캣(Tomcat)과 같은 컨테이너가 필요하다.

Spring Boot 프로젝트를 빌드하면 JAR(Java Archive) 형태의 결과물이 생성된다. 톰캣(Tomcat)을 내장하고 있기 때문에 JRE만 있어도 실행 가능하다.

# 스프링부트 프로젝트 빌드하기

Gradle을 사용하는 경우 다음과 같은 방법으로 스프링부트 프로젝트를 빌드할 수 있다.

$ ./gradlew clean build

빌드 결과물은 build/libs 디렉토리 아래 생성된다.

  • myproject-0.0.1.jar
  • myproject-0.0.1-plain.jar

# Plain jar vs. Executable jar

스프링 부트 2.5부터는 프로젝트를 빌드하면 두 개의 JAR 파일이 생성된다.

  • myproject-0.0.1.jar
  • myproject-0.0.1-plain.jar

myproject-0.0.1-plain.jar는 어플리케이션 실행에 필요한 의존성을 포함하지 않고 작성된 소스코드의 클래스 파일과 리소스 파일만 포함한다. 의존성을 포함하지 않기 때문에 java -jar 명령어로 실행할 경우 에러가 발상한다. 이러한 JAR 파일을 Plain jar라고 한다.

myproject-0.0.1.jar는 어플리케이션 실행에 필요한 모든 의존성을 포함한다. 때문에 java -jar 명령어로 실행할 수 있다.

Plain jar를 생성하지 않으려면 build.gradle에 다음 코드를 추가해주면 된다.

jar {
    enabled = false
}

# 스프링부트 실행하기

JAR 파일로 빌드된 스프링부트 프로젝트는 다음과 같이 실행할 수 있다.

$ java -jar myproject-0.0.1.jar

# 포트번호 설정하기

$ java -jar myproject-0.0.1.jar --server.port=8080

-D 파라미터는 반드시 -jar옵션과 <YOUR_JAR>.jar파일 사이에 와야한다.

$ java -jar --Dserver.port=8080 myproject-0.0.1.jar

# properties 파일 추가하기

src/main/resources에 위치하는 설정 파일(*.properties, *.yml)은 빌드할 때 JAR 파일 내부에 포함된다. 그러나 spring.config.location 옵션을 사용하면 JAR 파일 외부에 존재하는 설정 파일을 실행 시점에 포함시킬 수 있다.

$ java -jar myproject.jar --spring.config.location=/home/ec2-user/myapp/datasource.properties

콤마(,)로 여러 설정 파일을 적용할 수도 있다.

$ java -jar myproject.jar --spring.config.location=/home/ec2-user/myapp/datasource.properties,/home/ec2-user/app/myapp/security.properties

# Active Profile 파일 지정하기

spring.profiles.active 옵션으로 JAR 파일을 실행할 때 활성화할 프로파일을 지정할 수 있다.

$ java -jar -Dspring.profiles.active=dev myprojexwct-0.0.1.jar
$ java -jar myproject-0.0.1.jar --spring.profiles.active=dev
# application-dev.properties
spring.config.activate.on-profile=dev

# 생략..

# nohup

nohup은 프로세스와의 세션을 종료해도 프로세스가 백그라운드로 계속 실행하도록 하는 리눅스 명령어다. 보통 운영 환경에서 프로세스가 중단없이 실행되도록 하는데 사용한다.

// nohup [프로세스] &
$ nohup -jar myproject-0.0.1.jar &

nohup으로 실행한 프로세스는 nohup.out이라는 파일에 결과물을 출력한다. nohup.out 파일을 생성하지 않으려면 표준출력과 표준에러를 /dev/null로 리다이랙션해주면 된다.

// nohup [프로세스] &
$ nohup -jar myproject-0.0.1.jar 1>/dev/null 2>&1 &